以生活化的例子舉例,並發性指的是你把一個事情拆成許多子任務,例如整理儀容,你需要刷牙、洗臉和剃須,每件事情都完成時你的儀容才算整理完畢,這叫並發性。並行性指的是你同時做很多事,每件事情彼此不相千,就像邊洗澡邊聽音樂,或是邊吃早餐邊看新聞,這叫並行性。
“Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.” — Rob Pike
從技術面來看,Multi-thread,多線程(多執行緒)程式會把一個工作拆分成數個子任務,並利用好幾個thread同時運行子任務。
各自完成不同的工作,彼此之間不共享資源,使用情境: Load balancing,負載平衡機制,為了分散伺服器負擔,架設了多個伺服器,並將用戶平均分配到各自伺服器上。
並發性是程式的一種屬性,其中兩個或多個任務可以同時執行,並行性是兩個或多個任務同時運行時的屬性。並發可以使用並行來完成它的工作,請記住並行不是並發的最終目標。
在Go語言中,並發性是通過Goroutines實現的,Goroutines是可以與其他方法或函數並發運行的函數或方法。它們與java中的線程非常相似,但重量很輕,創建它們的成本也很低。
Goroutines相對於線程的優勢包括: